package com.zhn;

import java.util.Stack;

/**
 * 给定一个整数数组 temperatures ，表示每天的温度，返回一个数组 answer ，其中 answer[i] 是指对于第 i 天，下一个更高温度出现在几天后。如果气温在这之后都不会升高，请在该位置用 0 来代替。
 *
 *
 * 示例 1:
 * 输入: temperatures = [73,74,75,71,69,72,76,73]
 * 输出: [1,1,4,2,1,1,0,0]
 */
public class DailyTemperatures {
    //单调栈思路
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res = new int[temperatures.length];
        Stack<Integer> stack = new Stack<Integer>();
        //先向栈顶放入第一个元素的下标初始化，也就是放入0
        stack.push(0);
        for(int i = 1; i < temperatures.length; i++){
            //当前元素比栈顶元素小或者相等，直接入栈
            if(temperatures[i] <= temperatures[stack.peek()]){
                stack.push(i);
            }else {
                //当栈不为空，并且栈顶元素小于当前元素时，返回的数组存放当前元素下标和栈顶的元素值，也就是上一个比他小的数据的下标
                while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
                    res[stack.peek()] = i-stack.peek();
                    stack.pop();
                }
                stack.push(i);
            }
        }
        return res;
    }
}
